package org.lemma.language;

import java.util.List;
import javax.annotation.Author;
import javax.annotation.Copyright;
import javax.annotation.Version;
import org.lemma.number.Natural;

/**
 * <p>
 * A <dfn>Formula</dfn> is a string of symbols defined by a formal grammar 
 * that may be assigned a semantic meaning in a formal language.
 * </p>
 * <div class="references">
 *  <cite>
 *  "Formula (mathematical logic)." <i>Wikipedia, The Free Encyclopedia</i>. 
 *  21 Jun 2008, 10:36 UTC. Wikimedia Foundation, Inc.  29 Jul 2008 
 *  <a href="http://en.wikipedia.org/w/index.php?title=Formula_%28mathematical_logic%29&amp;oldid=220741754">
 *  http://en.wikipedia.org/w/index.php?title=Formula_%28mathematical_logic%29&amp;oldid=220741754</a>.
 *  </cite>
 * </div>
 *
 * @author Chris Beatty [christopher.beatty@gmail.com]
 * @version 1.0.0
 */
@Version(
    major   = "1",
    minor   = "0",
    patch   = "0",
    date    = "2006-10-10T12:00:00-5:00",
    authors = { @Author(name = "Christopher Beatty", email = "christopher.beatty@gmail.com") }
)
@Copyright
public interface Formula<L extends Language> extends Cloneable {

    public Natural arity();

    public String operator();

    public List<Formula<L>> operands();
    
    public Formula<L> clone();

}
